package com.example.amazing_wangjj.config;

import dev.langchain4j.store.embedding.pinecone.PineconeEmbeddingStore;
import dev.langchain4j.store.embedding.pinecone.PineconeServerlessIndexConfig;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.store.embedding.EmbeddingStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class PineconeEmbeddingStoreConfig {

    //向量模型，负责将文本切割，转换为向量
    @Autowired
    private EmbeddingModel embeddingModel;

    //向量数据库存储对象，用于接受向量模型处理好的向量，存储到向量数据库中
    @Bean
    public EmbeddingStore<TextSegment> embeddingStore() {
        //创建向量存储对象
        EmbeddingStore<TextSegment> embeddingStore = PineconeEmbeddingStore.builder()
                                                    .apiKey(System.getenv("PINECONE_EMBED_BASESTORE"))
                                                    .index("amazingjj-index")//如果指定的索引不存在，将创建一个新的索引
                                                    .nameSpace("amazingjj-namespace") //如果指定的名称空间不存在，将创建一个新的名称 空间
                                                    .createIndex(PineconeServerlessIndexConfig.builder() //创建一个新的索引时的配置
                                                            .cloud("AWS") //指定索引（数据库）部署在 AWS 云服务上。
                                                            .region("us-east-1") //指定索引所在的 AWS 区域为 us-east-1。
                                                            .dimension(embeddingModel.dimension()) //指定索引的向量维度，该维度与 embeddedModel大模型 生成的向量维度必须相同。
                                                            .build())
                                                    .build();
        return embeddingStore;
    }
}


